package com.kstech.mp3604.bean

import androidx.room.Embedded
import androidx.room.Entity
import androidx.room.PrimaryKey

/**
 * 接收的15所 socket 数据
 */
data class FromPdaData2(
    val data: List<TaskData>, val stackDeviceType: Int?, val timestamp: String?, val topic: String?
)


data class FromPdaData<T>(
    val data: T?, val stackDeviceType: Int, val timestamp: String, val topic: String
)
/**
 * 转化数据格式
 */

/**
 * 任务单
 */
@Entity(tableName = "taskData")
data class TaskData(
    val transferOrderNo: String, @PrimaryKey val taskId: String, val createTime: String,//创建时间
    val taskType: String,//一直是 1下发
    val productName: String,//暂时产品名称就是型号 应该是弹种类型
    val batchNo: String,//批次号
    val warehouseId: String,//仓库id
    val manufacture: String,//厂家
    val totalQuantity: Int,//总箱数
    val stackCoordinates: List<StackCoordinate>,//垛位信息
    @Embedded val liftingSpecification: LiftingSpecification,//吊运规则
    @Embedded val saveSpecification: SaveSpecification,//存储规则
    val operateType: String,//任务类型 INBOUND(入库), OUTBOUND(出库), REARRANGE(倒垛)
//    val boxCoordinates: List<BoxCoordinate>, //箱子坐标列表
    val safeDistance: Float,// 安全距离(mm)  显示0.1cm
    var timestamp: String,//本地系统时间
)

/**
 * 限制速度
 * socket发过来整数m/min
 * 串口   单位0.01m/min
 */
data class LiftingSpecification(
    val liftingSpeed: Double,//升降速度(m/min)
    val rotationSpeed: Double,//回转速度 可能没用(r/min)
    val approachSpeed: Double,//接近速度(m/min)
    val horizontalSpeed: Double//横溢速度(m/min)
)


data class SaveSpecification(
    val axialSpacing: Double,//垛位间距
    val rowSpacing: Double,//行间距
    val colSpacing: Double,//列间距
    val floorNumber: Int,//层数
    val floorHeight: Double//层高
)

data class StackCoordinate(
    val innerArcLength: String?,
    val outerArcLength: String?,
    val length: Double,
    val width: Double,
    val x: Int,//mm
    val y: Int,//mm
    val stackNumber: String, //垛位号
    val boxNumber: Int, //箱数 当是倒垛工况的时候，StackCoordinate数据长度必为2;StackCoordinate[0].boxNumber平板显示 StackCoordinate[1].boxNumber 常为0抛弃不显示
    var rearrange_StackNumber: String?,// 倒垛任务的时候有值，其他情况都为null
    var rearrange_x: Int?,//倒垛任务的时候有值，其他情况都为null
    var rearrange_y: Int?//倒垛任务的时候有值，其他情况都为null

)//todo double 转成int 类型
{
    lateinit var taskData: TaskData
}

/**
 * 2）箱子坐标(服务端->客户端)
 * X坐标(mm)（沿仓库轴线方向为x，质心坐标）
 * Y坐标(mm)（沿仓库轴线方向为x，质心坐标）
 * 层号（由下向上，第一层为1，第二层为2，第三层为3，第四层为4，第五层为5）
 */
data class BoxCoordinate(
    val sourceX: String?,
    val sourceY: String?,
    val sourceZ: String?,
    val targetX: Int,
    val targetY: Int,
    val targetZ: Int
)

/**
 * 以一个堆信息为单位
 * pda以他的格式传给平板，平板依照这个格式存储到数据库
 * 但是当打开dialogTaskFragment的时候，需要重构数据结构以使用adapter加载出来
 */


/**
 * 仓库参数
 */
data class ConfigParam(
    val oneLineLength: Int,//口1长度(mm)
    val twoLineLength: Int,//口2长度(mm)
    val innerArc: Int,//内弧半径(mm)
    val outerArc: Int,//外弧半径(mm)
    val angle: Float//角度 double
)
